# Xpath定位
# Extensible Markup Language（XML）：可扩展标记语言，用于存储或传输数据的标记语言
# XML Path Language（XPATH）： 一种在XML文档中查找信息的语言
# xpath作用：使用路径表达式获取xml文档中的节点（元素定位）
# xpath测试链接：https://www.lddgo.net/string/xml-xpath
# 语法： 浏览器对象.find_element(by=By.XPATH,value="xpath表达式")
# xpath定位分类：
# 绝对路径：
# 从最外层元素到指定元素之间所有经过的元素层级的路径 （层级关系依赖强，不建议使用）
# 写法：/html根节点开始，使用/来分隔元素层级。例
# 如： /html/body/div/fieldset/form/p[1]/input
# 相对路径：
# 从目标定位元素的任意层级的上级元素开始到目标元素所经过的层级的路径
# 写法：以 // 开始，后续每个层级都使用 / 来分隔。例如： //p[3]/input
# 路径+属性定位
# 利用元素的属性来定位
# 写法： //标签名[@属性名="属性值"] 或者 //*[@属性名="属性值"]
# //*[@属性名1="属性值" and @属性名2=属性值]
# 注意事项：标签名可以使用 * 来代替任意
# 1.导包（快捷键：alt + enter）
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
# 2.打开浏览器（创建浏览器驱动对象）
path = r"D:\tools\drivers\chromedriver.exe" # 定义驱动路径
ser = Service(executable_path=path) # 实例化Chrome浏览器服务驱动
driver = webdriver.Chrome(service=ser) # 打开Chrome浏览器
# 3.输入网址
driver.get("http://121.43.169.97:8848/pageA.html")
# 4.页面操作
# 属性定位：建议选择具有唯一性的属性
driver.find_element(By.XPATH,"//input[@name='userA']").send_keys("admin")
driver.find_element(By.XPATH,"//*[@id='passwordA']").send_keys("123456")
# 属性和逻辑结合
driver.find_element(By.XPATH,"//*[@type='button' and @value='prompt']").click()
# 5.等待2秒
time.sleep(2)
# 6.退出浏览器
driver.quit()



